#########################################################################
# Copyright (C) 2001-2025  The Bochs Project
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
#########################################################################

@SUFFIX_LINE@

srcdir = @srcdir@
VPATH = @srcdir@
top_builddir    = ..
top_srcdir      = @top_srcdir@

SHELL = @SHELL@

@SET_MAKE@

CC = @CC@
CFLAGS = @CFLAGS@ @GUI_CFLAGS@
CXX = @CXX@
CXXFLAGS = @CXXFLAGS@ @GUI_CXXFLAGS@
CPPFLAGS = @CPPFLAGS@

LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
RANLIB = @RANLIB@

# Definitely use flex.  Use flex version >= 2.5.4
# Flex version 2.5.2 was reported not to work
LEX    = flex
YACC   = yacc


# ===========================================================
# end of configurable options
# ===========================================================


BX_OBJS = \
  dbg_main.o \
  dbg_breakpoints.o \
  symbols.o \
  linux.o \

BX_PARSER_OBJS = \
  bx_parser.o \
  bx_lexer.o

BX_INCLUDES = debug.h

BX_INCDIRS = -I.. -I$(srcdir)/.. -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ -I. -I$(srcdir)/.

all: libdebug.a

.@CPP_SUFFIX@.o:
	$(CXX) @DASH@c $(BX_INCDIRS) $(CPPFLAGS) $(CXXFLAGS) @CXXFP@$< @OFP@$@


.c.o:
	$(CC) @DASH@c $(BX_INCDIRS) $(CPPFLAGS) $(CFLAGS) @CFP@$< @OFP@$@



libdebug.a: $(BX_OBJS) $(BX_PARSER_OBJS)
	@RMCOMMAND@ libdebug.a
	@MAKELIB@ $(BX_OBJS) $(BX_PARSER_OBJS)
	$(RANLIB) libdebug.a

$(BX_OBJS): $(BX_INCLUDES)


clean:
	@RMCOMMAND@ *.o
	@RMCOMMAND@ libdebug.a

dist-clean: clean
	@RMCOMMAND@ Makefile

parse-clean:
	@RMCOMMAND@ -f  bx_lexer.c
	@RMCOMMAND@ -f  bx_parser.cc
	@RMCOMMAND@ -f  bx_parser.h

dbg_main.o: debug.h

@NO_FLEX_YACC@bx_parser.cc: bx_parser.y
@NO_FLEX_YACC@	@/bin/rm -f y.tab.c bx_parser.cc
@NO_FLEX_YACC@	@/bin/rm -f y.tab.h bx_parser.h
@NO_FLEX_YACC@	$(YACC) -p bx -d $<
@NO_FLEX_YACC@	@/bin/mv -f y.tab.c bx_parser.cc
@NO_FLEX_YACC@	@/bin/mv -f y.tab.h bx_parser.h
@NO_FLEX_YACC@	@sed -i s/extern\ YYSTYPE/extern\ \"C\"\ YYSTYPE/ bx_parser.cc
@NO_FLEX_YACC@	@echo '#endif  /* if BX_DEBUGGER */' >> bx_parser.cc
@NO_FLEX_YACC@	@echo '/* The #endif is appended by the makefile after running yacc. */' >> bx_parser.cc

@NO_FLEX_YACC@bx_lexer.c: bx_lexer.l bx_parser.h
@NO_FLEX_YACC@	$(LEX) -Pbx -t $< > bx_lexer.c

###########################################
# dependencies generated by
#  gcc -MM -I. -I.. -I../instrument/stubs *.c  *.cc | sed 's/\.cc/.@CPP_SUFFIX@/g'
###########################################
bx_lexer.o: bx_lexer.c debug.h ../config.h ../osdep.h ../cpu/decoder/decoder.h \
 ../cpu/decoder/features.h bx_parser.h
dbg_breakpoints.o: dbg_breakpoints.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
 ../logio.h ../misc/bswap.h debug.h ../config.h ../osdep.h \
 ../cpu/decoder/decoder.h ../cpu/decoder/features.h
dbg_main.o: dbg_main.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../logio.h \
 ../misc/bswap.h ../param_names.h ../cpu/cpu.h ../cpu/decoder/decoder.h \
 ../cpu/decoder/features.h ../instrument/stubs/instrument.h ../cpu/i387.h \
 ../cpu/softfloat3e/include/softfloat_types.h ../config.h \
 ../cpu/fpu/tag_w.h ../cpu/fpu/status_w.h ../cpu/fpu/control_w.h \
 ../cpu/crregs.h ../cpu/descriptor.h ../cpu/decoder/instr.h \
 ../cpu/lazy_flags.h ../cpu/tlb.h ../cpu/icache.h ../cpu/xmm.h \
 ../cpu/vmx.h ../cpu/vmx_ctrls.h ../cpu/access.h \
 ../cpu/decoder/ia_opcodes.h ../cpu/decoder/ia_opcodes.def \
 ../cpu/decoder/ia_opcodes_evex.def ../iodev/iodev.h ../plugin.h \
 ../extplugin.h ../pc_system.h ../bx_debug/debug.h ../osdep.h \
 ../cpu/decoder/decoder.h ../memory/memory-bochs.h ../gui/siminterface.h \
 ../gui/paramtree.h ../gui/gui.h
linux.o: linux.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../logio.h \
 ../misc/bswap.h debug.h ../config.h ../osdep.h ../cpu/decoder/decoder.h \
 ../cpu/decoder/features.h ../cpu/cpu.h ../cpu/decoder/decoder.h \
 ../instrument/stubs/instrument.h ../cpu/i387.h \
 ../cpu/softfloat3e/include/softfloat_types.h ../cpu/fpu/tag_w.h \
 ../cpu/fpu/status_w.h ../cpu/fpu/control_w.h ../cpu/crregs.h \
 ../cpu/descriptor.h ../cpu/decoder/instr.h ../cpu/lazy_flags.h \
 ../cpu/tlb.h ../cpu/icache.h ../cpu/xmm.h ../cpu/vmx.h \
 ../cpu/vmx_ctrls.h ../cpu/access.h syscalls-linux.h
bx_parser.o: bx_parser.@CPP_SUFFIX@ debug.h ../config.h ../osdep.h \
 ../cpu/decoder/decoder.h ../cpu/decoder/features.h
symbols.o: symbols.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../logio.h \
 ../misc/bswap.h debug.h ../config.h ../osdep.h ../cpu/decoder/decoder.h \
 ../cpu/decoder/features.h ../cpu/cpu.h ../cpu/decoder/decoder.h \
 ../instrument/stubs/instrument.h ../cpu/i387.h \
 ../cpu/softfloat3e/include/softfloat_types.h ../cpu/fpu/tag_w.h \
 ../cpu/fpu/status_w.h ../cpu/fpu/control_w.h ../cpu/crregs.h \
 ../cpu/descriptor.h ../cpu/decoder/instr.h ../cpu/lazy_flags.h \
 ../cpu/tlb.h ../cpu/icache.h ../cpu/xmm.h ../cpu/vmx.h \
 ../cpu/vmx_ctrls.h ../cpu/access.h
